// 1826. [优先队列]整数对最小和 https://oj.rnd.huawei.com/problems/1826/details
// 解法1: 先求出全部对的和,再排序遍历. 解法2: 优先队列,代码如下
//给定两个整数数组array1、array2，数组元素按升序排列。
// 假设从array1、array2中分别选择一个元素可构成一个元素对。
//现在需要找出 k个元素对，并分别对这些元素对求和（两个值相加），
// 请计算这些和的累加值的最小值
//输入 首行输入整数size1，代表数组array1的大小，范围为 [1,100]
//第二行，输入数组array1的元素，元素值的范围为 [1,1000]
//第三行，输入整数size2，代表数组array2的大小，范围为 [1,100]
//第四行，输入数组array2的元素，元素值的范围为 [1,1000]
//最后一行是正整数 k，其值范围 [1,10000]，且不超过size1 * size2
//输出 一个整数，表示满足要求的最小和
//输入 3
// 1 1 2
// 2
// 1 4
// 2
//输出 4
//需要取2对元素
//选择第一个数组第0个元素与第二个数组第0个元素组成1对元素[1,1];
//选择第一个数组第1个元素与第二个数组第0个元素组成1对元素[1,1];
//求和为1+1+1+1=4，为满足要求的最小和。
//注意：如果再选择一次第一个数组第0个元素与第二个数组第0个元素组成的元素对，视为重复元素对，不纳入计算。

#include <bits/stdc++.h>
using namespace std;

#define DEBUG
#ifdef DEBUG
#define PF(...) printf(__VA_ARGS__)
#else
#define PF(...)
#endif
// typedef pair<int,int> NumPair;
static vector<int> array1_, array2_;
struct NumPair {
  size_t x = 0, y = 0;
  bool operator>(const NumPair &oth) const {  // {1,2,3}
    return (array1_[x] + array2_[y]) > (array1_[oth.x] + array2_[oth.y]);
  }
};
int GetMinSum(const vector<int> &array1, const vector<int> &array2, size_t k) {
  array1_ = array1;
  array2_ = array2;
  // queue: NumPair的x,y是对应数组的下标.array1[x], array2[y]
  priority_queue<NumPair, vector<NumPair>, greater<NumPair>> minQueue;
  // 先存array1的全部下标
  for (size_t i = 0; i < min(k, array1.size()); i++) {
    PF("push1  %d,%d\n", i, 0);
    minQueue.push({i, 0});
  }
  int nSum = 0;
  while (k-- > 0 && !minQueue.empty()) {
    auto [x, y] = minQueue.top();
    minQueue.pop();
    nSum += array1[x] + array2[y];
    PF("pari===a1[%d] + a2[%d]= %d + %d = %d\n", x, y, array1[x], array2[y], nSum);
    if (y + 1 < array2.size()) {
      // queue 里不断添加
      PF("push..  %d,%d\n", x, y + 1);
      minQueue.push({x, y + 1});
    }
  }
  return nSum;
}
int main() {
  int size;
  cin >> size;
  vector<int> array1;
  int num;
  for (int loop = 0; loop < size; loop++) {
    cin >> num;
    array1.push_back(num);
  }
  cin >> size;
  vector<int> array2;
  for (int loop = 0; loop < size; loop++) {
    cin >> num;
    array2.push_back(num);
  }
  int k;
  cin >> k;
  cout << GetMinSum(array1, array2, k) << endl;
  return 0;
}
